-
Notifications
You must be signed in to change notification settings - Fork 220
Adding incremental Frontend Server-compatible DDC builders + supporting infrastructure #4240
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…r fine modules for hot reload
PR HealthChangelog Entry ✔️
Changes to files need to be accounted for in their respective changelogs. This check can be disabled by tagging the PR with |
|
It looks like you made some changes in response to my comments but I don't see any responses to the comments so I'm not sure if you're done--please let me know if/when I should take another look. Thanks! |
davidmorgan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Welcome back!
Looking good so far.
There are some CI failures, could you take a look at those please?
Whoops, looks like I had unpublished comments that you addressed by coincidence. Sorry about that! Now published. |
@davidmorgan Oh no - you didn't see my comments? I can ping you when things are fully ready, but I've been in and out since I'm sick with something mysterious lol @nshahan Thanks for reviewing! I updated some of the formatting based on your feedback. It looks like I've encountered a windows pathing issue in some SDK lib. I'll investigate tomorrow :( |
I think we're back in sync now, I'll keep commenting on changes/comments, and take a final look when we think it's done :) thanks. |
davidmorgan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, feel free to address the e2e test suggestion before landing or not, it's easy enough to improve later if we want.
nshahan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few more comments but LGTM!
This was mistakenly removed in #4240
Glues FES into build_runner, which is our first step towards hot reload + build_runner.
The high level workflow is:
build_runner(hot-reload ready).Major changes:
DdcFrontendServerBuilderto our set of DDC builders (enabled via theweb-hot-reloadconfig). This builder keeps aPersistentFrontendServerinstance alive across rebuilds. Compile/recompile requests are queued via aFrontendServerProxyDriverresource.scratch_spaceto record both 1) the main app entrypoint and 2) updated local files from theentrypoint_markerbuilder and themodule_builderbuilder respectively. These are side effects that break certain stateful 'guarantees' of standard build_runner execution. Theentrypoint_markerbuilder runs before any of the downstream DDC builders and finds the web entrypoint, as Frontend Server must receive the same entrypoint on every compilation request.build_runnerbe disabled.Test changes:
build_testto permit incremental builds. This involves passing the asset graph + asset reader/writer across build results and only performing cleanup operations after a series of rebuilds.build_testdoesn't supportruns_beforeand other ordering rules inbuild.yaml, so the above changes allows a kind of imperative ordering, which is important for testingentrypoint_marker.Minor changes:
scratch_spaceso that rebuilds only retain modified files.scratch_spacepackage_config.jsonspecs (packageUriandrootUri). The previous values didn't seem to make sense to me, but I'm also not familiar with how that's standardized inscratch_space.fileanduuiddeps tobuild_modules.Currently doesn't support live-reloading (functionality appears to have been broken a while ago). This'll be added in an upcoming change and permit
webdev-like auto-hot-reload on save (on top of manual).Enable this by adding the following to a project's
build.yaml: